const system = require('../../utils/system.js');
const { userApi } = require('../../utils/request.js');

// 获取应用实例
const app = getApp();

Page({
  /**
   * 页面的初始数据
   */
  data: {
    statusBarHeight: 0,
    isRegister: false, // 是否为注册模式
    
    // 登录表单数据
    username: '',
    password: '',
    showPassword: false,
    canLogin: false,
    
    // 注册表单数据
    regUsername: '',
    regPassword: '',
    regNickname: '', // 添加昵称字段
    confirmPassword: '',
    showRegPassword: false,
    showConfirmPassword: false,
    canRegister: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 设置状态栏高度
    this.setData({
      statusBarHeight: system.statusBarHeight || 20
    });
    
    // 如果有参数指定显示注册页面
    if (options.register === 'true') {
      this.setData({
        isRegister: true
      });
    }
  },

  /**
   * 切换到登录模式
   */
  switchToLogin() {
    this.setData({
      isRegister: false
    });
  },

  /**
   * 切换到注册模式
   */
  switchToRegister() {
    this.setData({
      isRegister: true
    });
  },

  /**
   * 登录手机号输入
   */
  onUsernameInput(e) {
    this.setData({
      username: e.detail.value
    }, this.checkCanLogin);
  },

  /**
   * 登录密码输入
   */
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value
    }, this.checkCanLogin);
  },

  /**
   * 切换密码可见性
   */
  togglePasswordVisibility() {
    this.setData({
      showPassword: !this.data.showPassword
    });
  },

  /**
   * 检查是否可以登录
   */
  checkCanLogin() {
    const { username, password } = this.data;
    this.setData({
      canLogin: username.length > 0 && password.length >= 6
    });
  },

  /**
   * 处理登录
   */
  handleLogin() {
    if (!this.data.canLogin) return;
    
    const { username, password } = this.data;
    
    wx.showLoading({
      title: '登录中...',
      mask: true
    });
    
    userApi.login({ username, password })
      .then(res => {
        console.log('登录返回数据:', res);
        
        // 确保Token的正确格式
        let token = res.token;
        if (token && !token.startsWith('Bearer ') && !token.startsWith('bearer ')) {
          token = token; // 保持原样，后端API不需要Bearer前缀
        }
        
        // 保存token和用户信息
        wx.setStorageSync('token', token);
        wx.setStorageSync('userInfo', res.user);
        
        // 更新全局登录状态
        app.updateLoginStatus(true, res.user);
        
        console.log('全局状态:', app.globalData);
        
        wx.showToast({
          title: '登录成功',
          icon: 'success',
          duration: 2000
        });
        
        setTimeout(() => {
          // 返回上一页并刷新
          const pages = getCurrentPages();
          console.log('当前页面栈:', pages);
          const prevPage = pages[pages.length - 2];
          if (prevPage && prevPage.onShow) {
            console.log('触发上一页onShow');
            prevPage.onShow(); // 触发上一页的onShow方法
          }
          wx.navigateBack();
        }, 1500);
      })
      .catch(err => {
        wx.showToast({
          title: err.message || '登录失败',
          icon: 'error'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },

  /**
   * 注册手机号输入
   */
  onRegUsernameInput(e) {
    this.setData({
      regUsername: e.detail.value
    }, this.checkCanRegister);
  },

  /**
   * 注册密码输入
   */
  onRegPasswordInput(e) {
    this.setData({
      regPassword: e.detail.value
    }, this.checkCanRegister);
  },

  /**
   * 注册昵称输入
   */
  onRegNicknameInput(e) {
    this.setData({
      regNickname: e.detail.value
    }, this.checkCanRegister);
  },

  /**
   * 确认密码输入
   */
  onConfirmPasswordInput(e) {
    this.setData({
      confirmPassword: e.detail.value
    }, this.checkCanRegister);
  },

  /**
   * 切换注册密码可见性
   */
  toggleRegPasswordVisibility() {
    this.setData({
      showRegPassword: !this.data.showRegPassword
    });
  },

  /**
   * 切换确认密码可见性
   */
  toggleConfirmPasswordVisibility() {
    this.setData({
      showConfirmPassword: !this.data.showConfirmPassword
    });
  },

  /**
   * 检查是否可以注册
   */
  checkCanRegister() {
    const { regUsername, regPassword, confirmPassword, regNickname } = this.data;
    
    const usernameValid = regUsername.length > 0;
    const nicknameValid = regNickname.length > 0;
    const passwordValid = regPassword.length >= 6;
    const confirmValid = regPassword === confirmPassword;
    
    this.setData({
      canRegister: usernameValid && passwordValid && confirmValid && nicknameValid
    });
  },

  /**
   * 处理注册
   */
  handleRegister() {
    if (!this.data.canRegister) return;
    
    const { regUsername: username, regPassword: password, regNickname: nickname } = this.data;
    
    wx.showLoading({
      title: '注册中...',
      mask: true
    });
    
    userApi.register({ 
      username, 
      password,
      nickname
    })
      .then(res => {
        wx.hideLoading();
        
        console.log('注册返回数据:', res);
        
        // 保存token和用户信息
        wx.setStorageSync('token', res.token);
        wx.setStorageSync('userInfo', res.user);
        
        // 更新全局登录状态
        app.updateLoginStatus(true, res.user);
        
        wx.showToast({
          title: '注册成功',
          icon: 'success',
          duration: 2000
        });
        
        setTimeout(() => {
          // 返回上一页并刷新
          const pages = getCurrentPages();
          const prevPage = pages[pages.length - 2];
          if (prevPage && prevPage.onShow) {
            prevPage.onShow(); // 触发上一页的onShow方法
          }
          wx.navigateBack();
        }, 1500);
      })
      .catch(err => {
        wx.hideLoading();
        wx.showToast({
          title: err.message || '注册失败',
          icon: 'error'
        });
      });
  },

  /**
   * 返回上一页
   */
  goBack() {
    wx.navigateBack();
  }
}); 